﻿using System.Collections.Generic;

namespace SharpTag.ID3
{
    /// <summary>
    /// Interface representing an ExtendedHeader of a Tag.
    /// </summary>
    public interface ITagExtendedHeader : IPreparable, IModifiable
    {
        /// <summary>
        /// Gets the Size of the ExtendedHeader.
        /// </summary>
        long Size
        {
            get;
        }

        /// <summary>
        /// Gets the Size of the Padding.
        /// </summary>
        long SizeOfPadding
        {
            get;
        }

        /// <summary>
        /// Gets the Total Frame CRC.
        /// </summary>
        long TotalFrameCRC
        {
            get;
        }

        /// <summary>
        /// Gets the list of <see cref="ExtendedHeaderFlag"/> objects in the ExtendedHeader.
        /// </summary>
        List<ExtendedHeaderFlag> Flags
        {
            get;
        }

        /// <summary>
        /// Adds an <see cref="ExtendedHeaderFlag"/> object to the ExtendedHeader.
        /// </summary>
        /// <param name="flag">An <see cref="ExtendedHeaderFlag"/> object.</param>
        void AddFlag(ExtendedHeaderFlag flag);

        /// <summary>
        /// Removes an <see cref="ExtendedHeaderFlag"/> object to the ExtendedHeader.
        /// </summary>
        /// <param name="flag">An <see cref="ExtendedHeaderFlag"/> object.</param>
        void RemoveFlag(ExtendedHeaderFlag flag);
    }
}
